/**
 * @file UnidadeEntidades.h
 * @author  Patrick Kabongo Cisuaka 09/53806 & Yuri Lavinas 09/0015266
 *\date Criacao: 20/janeiro/2013
 *
 *  Essa unidade contem as codificacoes das classes Entidades que modelam os dominios.
 *  As classes sao: Usuario, IPostagem e IComentario.
 *
 */

#ifndef UnidadeEntidadesH
#define UnidadeEntidadesH


#include "UnidadeTiposBasicos.h"

/**
     * A classe Usuario com os seus atributos e as funcoes get e set
     */

class Usuario {
private:
        Nome nome; /**< Atributo da classe Usuario. */
        Senha senha; /**< Atributo da classe Usuario. */
        Id id; /**< Atributo da classe Usuario. */
public:
        Usuario(){} /**< Funcao Usuario. */
        Usuario(Nome, Id, Senha);/**< Atributos da classe Usuario. */
        Nome getNome() const; /**< traz o valor de Nome. */
        void setNome(const Nome&); /**< manipular o valor de Nome. */
        Senha getSenha() const; /**< traz o valor de Senha. */
        void setSenha(const Senha&); /**< manipular o valor de Senha. */
        Id getId() const; /**< traz o valor de Id. */
        void setId(const Id&); /**< manipular o valor de Id. */
};


/**
     * A classe IPostagem com os seus atributos e as funcoes get e set
     */

class IPostagem {
private:
        Postagem  postagem; /**< Atributo da classe IPostagem. */
        Nome nome; /**< Atributo da classe IPostagem. */
        Data data; /**< Atributo da classe IPostagem. */
        Comentario comentario; /**< Atributo da classe IPostagem. */
        Avaliacao avaliacao; /**< Atributo da classe IPostagem. */
public:
        IPostagem(){} /**< Funcao IPostagem. */
        IPostagem(Postagem,Nome, Data, Comentario, Avaliacao); /**< Atributos da classe IPostagem. */
        Nome getNome() const; /**< traz o valor de Nome. */
        void setNome(const Nome&); /**< manipular o valor de Nome. */
        Postagem getPostagem() const; /**< traz o valor de Postagem. */
        void  setPostagem(const Postagem&); /**< manipular o valor de Postagem. */
        Data getData() const; /**< traz o valor de Data. */
        void setData(const Data&); /**< manipular o valor de Data. */
        Comentario getComentario() const; /**< traz o valor de Comentario. */
        void setComentario(const Comentario&); /**< manipular o valor de Comentario. */
        Avaliacao getAvaliacao() const; /**< traz o valor de Avaliacao. */
        void setAvaliacao(const Avaliacao&); /**< manipular o valor de Avaliacao. */
};

/**
     * A classe Icomentario com os seus atributos e as funcoes get e set
     */

class IComentario {
private:
        Comentario comentario; /**< Atributo da classe IComentario. */
        Postagem postagem; /**< Atributo da classe IComentario. */
        Nome nome; /**< Atributo da classe IComentario. */
        Data data; /**< Atributo da classe IComentario. */
public:
        IComentario(){}; /**< Funcao IComentario. */
        IComentario(Comentario, Postagem, Nome, Data); /**< Atributos da classe IComentario. */
        Comentario getComentario() const; /**< traz o valor de Comentario. */
        void setComentario(const Comentario&); /**< manipular o valor de Comentario. */
        Postagem getPostagem() const; /**< traz o valor de Postagem. */
        void  setPostagem(const Postagem&); /**< manipular o valor de Postagem. */
        Nome getNome() const; /**< traz o valor de Nome. */
        void setNome(const Nome&); /**< manipular o valor de Nome. */
        Data getData() const; /**< traz o valor de Data. */
        void setData(const Data&); /**< manipular o valor de Data. */
};

/**
     * Definicao dos metodos inline.
     */

inline Nome Usuario::getNome() const {
        return nome;
}

inline Senha Usuario::getSenha() const {
        return senha;
}

inline Id Usuario::getId() const {
        return id;
}

inline Postagem IPostagem::getPostagem() const {
        return postagem;
}

inline Nome IPostagem::getNome() const {
        return nome;
}

inline Data IPostagem::getData() const {
        return data;
}

inline Comentario IPostagem::getComentario() const {
        return comentario;
}

inline Avaliacao IPostagem::getAvaliacao() const {
        return avaliacao;
}

inline Comentario IComentario::getComentario() const {
        return comentario;
}

inline Postagem IComentario::getPostagem() const {
        return postagem;
}

inline Nome IComentario::getNome() const {
        return nome;
}

inline Data IComentario::getData() const {
        return data;
}
#endif
